Imports System
Imports System.Web.UI
<ParseChildren(True)> Public Class TemplatedHelloWorldVB
Inherits Control
Implements INamingContainer
Private _messageTemplate As ITemplate
Private _toPerson As String = Nothing
Private _fromPerson As String = Nothing
Private _message As String = Nothing
Private myTemplateContainer As Control
Protected Overrides Sub OnDataBinding(ByVal e As EventArgs)
EnsureChildControls()
End Sub
<TemplateContainer(GetType(MessageTemplateContainerVB))> Public Property MessageTemplate() As ITemplate
Get
Return _messageTemplate
End Get
Set(ByVal Value As ITemplate)
_messageTemplate = Value
End Set
End Property
Public Property ToPerson() As String
Get
Return _toPerson
End Get
Set(ByVal Value As String)
_toPerson = Value
End Set
End Property
Public Property FromPerson() As String
Get
Return _fromPerson
End Get
Set(ByVal Value As String)
_fromPerson = Value
End Set
End Property
Public Property Message() As String
Get
Return _message
End Get
Set(ByVal Value As String)
_message = Value
End Set
End Property
Protected Overrides Sub CreateChildControls()
If Not MessageTemplate Is Nothing Then
' Use user-defined template for rendering
myTemplateContainer = New MessageTemplateContainerVB(Me)
MessageTemplate.InstantiateIn(myTemplateContainer)
Controls.Add(myTemplateContainer)
Else
' Use the default rendering
Controls.Add(New LiteralControl("<b>To:</b> " & ToPerson & "<br/>"))
Controls.Add(New LiteralControl("<b>From:</b> " & FromPerson & "<br/>"))
Controls.Add(New LiteralControl("<b>Message:</b><p>" & Message & "</p>"))
End If
End Sub
End Class
' Keeps a backpointer to the parent control to access its properties
Public Class MessageTemplateContainerVB
Inherits Control
Implements INamingContainer
Private _parent As TemplatedHelloWorldVB
Public Sub New(ByVal parent As TemplatedHelloWorldVB)
_parent = parent
End Sub
Public ReadOnly Property ToPerson() As String
Get
Return _parent.ToPerson
End Get
End Property
Public ReadOnly Property FromPerson() As String
Get
Return _parent.FromPerson
End Get
End Property
Public ReadOnly Property Message() As String
Get
Return _parent.Message
End Get
End Property
End Class